我們在確認模型都訓練完後,接下來只要有任何新數據,即使沒有最終結果,我們也可以幫忙預測囉。以實作來說,我們只要有所有新病患的 input 檢查結果,就可以得到他是 Normal 還是 Abnormal 了🩺。
1) 數據準備:在進行預測之前,需要準備好新數據並將其整理成陣列。確保該陣列的順序與模型訓練時一致,以避免模型誤解數據,導致超出範圍的預測結果📊。例如,如果模型期望的輸入特徵順序是 [特徵1, 特徵2, 特徵3],那麼新的數據陣列必須以相同的順序 [特徵1, 特徵2, 特徵3] 排列。
在數據訓練集中,我們可以用以下程式碼確認參數順序:X_train.columns
輸出結果為
Index(['Age', 'Billing Amount', 'Length of Stay', 'Gender_Male',
'Blood Type_A-', 'Blood Type_AB+', 'Blood Type_AB-', 'Blood Type_B+',
'Blood Type_B-', 'Blood Type_O+', 'Blood Type_O-',
'Medical Condition_Asthma', 'Medical Condition_Cancer',
'Medical Condition_Diabetes', 'Medical Condition_Hypertension',
'Medical Condition_Obesity', 'Insurance Provider_Blue Cross',
'Insurance Provider_Cigna', 'Insurance Provider_Medicare',
'Insurance Provider_UnitedHealthcare', 'Admission Type_Emergency',
'Admission Type_Urgent', 'Medication_Ibuprofen', 'Medication_Lipitor',
'Medication_Paracetamol', 'Medication_Penicillin'],
dtype='object')
此外,之前做過 One Hot Encoding 的那些特徵,都會用 True = 1、False=0 表示,例如,若病患血型為A- 型,則在 Blood Type_A- 欄位要輸入 1,其他血型的欄位則為 0。
假如我們新收案的病患數據如下:
則他的一維數據會變成 [40, 37000, 20, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1]
轉換陣列的方式為:
import numpy as np
new_patient_data = np.array([[40, 37000, 20, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1]
]) # 實際檢查數據如上面的一維數據
2) 載入我們之前訓練好的模型和 scaler 的 pickle 檔,📥以確保新的數據進行相同的標準化或縮放處理。
import pickle
# 載入模型
with open('best_random_forest_model.pkl', 'rb') as model_file:
model = pickle.load(model_file)
# 載入 scaler
with open('scaler.pkl', 'rb') as scaler_file:
scaler = pickle.load(scaler_file)
3) 數據縮放:使用載入的 scaler 對新數據進行縮放,以確保數據與訓練時的處理方式一致🔧。我們過去有縮放,因此測試的時候也是要縮放以免模型誤判。
# 對新數據進行縮放
scaled_data = scaler.transform(new_patient_data)
4) 進行預測:使用載入的模型對縮放後的新病患數據進行預測🔮。
# 進行預測
predictions = model.predict(scaled_data)
print("預測結果:", predictions)
模型預測是機器學習過程中的重要一步,它將訓練成果應用於實際情況。然而,單純的程式碼並不適合直接呈現給專業人員,因為他們通常不具備資訊背景💻。因此,我們需要將模型部署到一個用戶友好的介面,使專業人員能夠輕鬆輸入數據並獲得預測結果🌟。
進一步的部署不僅能夠提供方便的輸入方式,還可以隱藏數據轉換(如編碼)的複雜性,使整個過程更加簡潔明瞭。這樣的系統將能夠幫助醫療人員更好地理解預測結果,從而支持他們在臨床上的決策🩺。
[圖片來源:MeMeCreator]